- uses: actions/checkout@v4
with:
fetch-depth: 1
+
- name: Configure, compile and package
+ id: build-appimage
+ env:
+ PR_ID: ${{ github.event.number }}
run: |
BUILDNR=${GITHUB_RUN_ID} VERSION_SUFFIX=${GITHUB_HEAD_REF} BUILD_UPDATER=ON DESKTOP_CLIENT_ROOT=`pwd` EXECUTABLE_NAME=nextcloud QT_BASE_DIR=/opt/qt OPENSSL_ROOT_DIR=/usr/local/lib64 /bin/bash -c "./admin/linux/build-appimage.sh"
- BUILDNR=${GITHUB_RUN_ID} VERSION_SUFFIX=${GITHUB_HEAD_REF} DESKTOP_CLIENT_ROOT=`pwd` /bin/bash -c "./admin/linux/upload-appimage.sh" || echo "Upload failed, however this is an optional step."
+
+ - name: Upload AppImage artifact
+ id: upload-appimage
+ uses: actions/upload-artifact@v4
+ with:
+ name: appimage-pr-${{ github.event.number }}
+ path: ${{ steps.build-appimage.outputs.APPIMAGE_NAME }}
+ overwrite: true
+
+ - name: Comment AppImage
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const comment_identifier_string = "<!-- automated comment for an appimage build -->";
+
+ const comment_body = `
+ ${comment_identifier_string}
+
+ AppImage file: [${{ steps.build-appimage.outputs.APPIMAGE_NAME }}](${{ steps.upload-appimage.outputs.artifact-url }})
+
+ To test this change/fix you can simply download above AppImage file and test it.
+
+ Please make sure to quit your existing Nextcloud app and backup your data.
+ `;
+
+ console.log("fetching old comments")
+ const comments = await github.rest.issues.listComments({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ });
+
+ comments
+ .data
+ .filter(comment => comment.body?.includes(comment_identifier_string))
+ .forEach(comment => {
+ console.log(`deleting previous AppImage comment with ID ${comment.id}`)
+ github.rest.issues.deleteComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ comment_id: comment.id,
+ })
+ });
+
+ console.log("creating new comment")
+ github.rest.issues.createComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ body: comment_body,
+ });
export VERSION_SUFFIX=${VERSION_SUFFIX:stable}
# Set defaults
-export SUFFIX=${DRONE_PULL_REQUEST:=master}
+export SUFFIX=${PR_ID:=${DRONE_PULL_REQUEST:=master}}
if [ $SUFFIX != "master" ]; then
SUFFIX="PR-$SUFFIX"
fi
LD_LIBRARY_PATH="$PWD/appimagetool-squashfs-root/usr/lib":$LD_LIBRARY_PATH PATH="$PWD/appimagetool-squashfs-root/usr/bin":$PATH appimagetool -n ./squashfs-root "${APPIMAGE}"
#move AppImage
-if [ ! -z "$DRONE_COMMIT" ]
+export COMMIT=${GITHUB_SHA:=${DRONE_COMMIT}}
+if [ ! -z "$COMMIT" ]
then
- mv *.AppImage ${EXECUTABLE_NAME}-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
+ export APPIMAGE_NAME="${EXECUTABLE_NAME}-${SUFFIX}-${COMMIT}-x86_64.AppImage"
else
- mv *.AppImage ${EXECUTABLE_NAME}-${SUFFIX}-x86_64.AppImage
+ export APPIMAGE_NAME="${EXECUTABLE_NAME}-${SUFFIX}-x86_64.AppImage"
+fi
+mv *.AppImage ${DESKTOP_CLIENT_ROOT}/$APPIMAGE_NAME
+
+# tell GitHub Actions the name of our appimage
+if [ ! -z "$GITHUB_OUTPUT" ]; then
+ echo "AppImage name: ${APPIMAGE_NAME}"
+ echo "APPIMAGE_NAME=${APPIMAGE_NAME}" >> "$GITHUB_OUTPUT"
fi
-mv *.AppImage ${DESKTOP_CLIENT_ROOT}/
+++ /dev/null
-#! /bin/bash
-
-# Env
-export BUILD=${DRONE_BUILD_NUMBER}
-export PR=${DRONE_PULL_REQUEST}
-export GIT_USERNAME=${CI_UPLOAD_GIT_USERNAME}
-export GIT_TOKEN=${CI_UPLOAD_GIT_TOKEN}
-
-# Needed to get it working on drone
-export SUFFIX=${DRONE_PULL_REQUEST:=master}
-if [ $SUFFIX != "master" ]; then
- SUFFIX="PR-$SUFFIX"
-fi
-export DESKTOP_CLIENT_ROOT=${DESKTOP_CLIENT_ROOT:-/home/user}
-export APPNAME=${APPNAME:-nextcloud}
-
-# Defaults
-export GIT_REPO=ci-builds
-export API_BASE_URL=https://api.github.com/repos/$GIT_USERNAME/$GIT_REPO
-export DESKTOP_API_BASE_URL=https://api.github.com/repos/nextcloud/desktop
-
-# PR / master
-export TAG_NAME=${PR:=master}
-export RELEASE_BODY=https://github.com/nextcloud/desktop
-
-if [ $TAG_NAME != "master" ]; then
- TAG_NAME="PR-$TAG_NAME"
- RELEASE_BODY="nextcloud/desktop#$PR"
-fi
-
-cd ${DESKTOP_CLIENT_ROOT}
-echo `pwd`
-ls
-
-# AppImage
-if [ ! -z "$DRONE_COMMIT" ]
-then
- export APPIMAGE=$(readlink -f ./${APPNAME}-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage)
-else
- export APPIMAGE=$(readlink -f ./Nextcloud*.AppImage)
-fi
-
-export UPDATE=$(readlink -f ./Nextcloud*.AppImage.zsync)
-export BASENAME=$(basename ${APPIMAGE})
-
-if ! test -e $APPIMAGE ; then
- exit 1
-fi
-
-echo "Found AppImage: $BASENAME"
-
-if [ $TAG_NAME != "master" ]; then
- # Delete all old comments in desktop PR, starting with "AppImage file:"
- oldComments=$(curl 2>/dev/null -u $GIT_USERNAME:$GIT_TOKEN -X GET $DESKTOP_API_BASE_URL/issues/$PR/comments | jq '.[] | (.id |tostring) + "|" + (.user.login | test("'${GIT_USERNAME}'") | tostring) + "|" + (.body | test("AppImage file:.*") | tostring)' | grep "true|true" | tr -d "\"" | cut -f1 -d"|")
-
- if [[ "$oldComments" != "" ]]; then
- echo $oldComments | while read comment ; do
- curl 2>/dev/null -u $GIT_USERNAME:$GIT_TOKEN -X DELETE $DESKTOP_API_BASE_URL/issues/comments/$comment
- done
- fi
-fi
-
-# Helper functions
-urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
-
-create_release()
-{
- name=$TAG_NAME
- body=$RELEASE_BODY
- tagName=$TAG_NAME
- echo $(curl 2>/dev/null -u $GIT_USERNAME:$GIT_TOKEN -X POST $API_BASE_URL/releases -d "{ \"tag_name\": \"$tagName\", \"target_commitish\": \"master\", \"name\": \"$name\", \"body\": \"$body\", \"draft\": false, \"prerelease\": true }")
-}
-
-get_release()
-{
- tagName=$TAG_NAME
- echo $(curl 2>/dev/null -u $GIT_USERNAME:$GIT_TOKEN -X GET $API_BASE_URL/releases/tags/$tagName)
-}
-
-get_release_assets()
-{
- releaseId=$1
- echo $(curl 2>/dev/null -u $GIT_USERNAME:$GIT_TOKEN -X GET $API_BASE_URL/releases/$releaseId/assets)
-}
-
-upload_release_asset()
-{
- uploadUrl=$1
- echo $(curl --max-time 900 -u $GIT_USERNAME:$GIT_TOKEN -X POST $uploadUrl --header "Content-Type: application/octet-stream" --upload-file $APPIMAGE)
- echo $(curl --max-time 900 -u $GIT_USERNAME:$GIT_TOKEN -X POST $uploadUrl --header "Content-Type: application/octet-stream" --upload-file $UPDATE)
-}
-
-delete_release_asset()
-{
- assetId=$1
- curl 2>/dev/null -u $GIT_USERNAME:$GIT_TOKEN -X DELETE $API_BASE_URL/releases/assets/$assetId
-}
-
-# Try to get an already existing release
-json=$(get_release)
-
-releaseId=$(echo $json | jq -r '.id')
-uploadUrl=$(echo $json | jq -r '.upload_url')
-
-if [[ "$uploadUrl" == "null" ]]; then
- # Try to create a release
- json=$(create_release)
- echo $json
-
- releaseId=$(echo $json | jq -r '.id')
- uploadUrl=$(echo $json | jq -r '.upload_url')
-
- if [[ "$uploadUrl" == "null" ]]; then
- echo "create_release failed: $json"
- exit 2
- fi
-fi
-
-# Prepare upload url
-uploadUrl=$(echo "${uploadUrl/'{?name,label}'/?name=$BASENAME}")
-
-# Try to delete existing AppImage assets for this PR
-assets=$(get_release_assets $releaseId)
-
-for data in $(echo $assets | jq -r '.[] | @uri'); do
- json=$(urldecode "$data")
-
- assetId=$(echo $json | jq -r '.id')
- name=$(echo $json | jq -r '.name')
-
- if [[ "$name" == *.AppImage ]]; then
- echo "Deleting old asset: $name"
- $(delete_release_asset $assetId)
- fi
-done
-
-# Upload release asset
-echo "Uploading new asset: $BASENAME"
-
-json=$(upload_release_asset "$uploadUrl")
-browserDownloadUrl=$(echo $json | jq -r '.browser_download_url')
-
-if [[ "$browserDownloadUrl" == "null" ]]; then
- echo "upload_release_asset failed: $json"
- exit 3
-fi
-
-if [ $TAG_NAME != "master" ]; then
- # Create comment in desktop PR
- curl 2>/dev/null -u $GIT_USERNAME:$GIT_TOKEN -X POST $DESKTOP_API_BASE_URL/issues/$PR/comments -d "{ \"body\" : \"AppImage file: [$BASENAME]($browserDownloadUrl) <br/><br/>To test this change/fix you can simply download above AppImage file and test it. <br/><br/>Please make sure to quit your existing Nextcloud app and backup your data. \" }"
-fi
-
-echo
-echo "AppImage link: $browserDownloadUrl"